#!/bin/bash

# 清理函数
cleanup() {
    echo "正在关闭服务..."
    
    # 获取Python进程PID
    if [ -f ".pid" ]; then
        PID=$(cat .pid)
        if ps -p $PID > /dev/null; then
            echo "正在优雅关闭Python服务 (PID: $PID)..."
            kill -TERM $PID
            
            # 等待进程结束，最多等待10秒
            COUNTER=0
            while ps -p $PID > /dev/null && [ $COUNTER -lt 10 ]; do
                sleep 1
                let COUNTER=COUNTER+1
            done
            
            # 如果进程仍然存在，强制结束
            if ps -p $PID > /dev/null; then
                echo "服务未能在10秒内关闭，正在强制结束..."
                kill -9 $PID
            fi
        fi
        rm -f .pid
    fi
    
    # 确保8080端口被释放
    PID=$(lsof -t -i:8080 2>/dev/null)
    if [ ! -z "$PID" ]; then
        echo "正在释放端口 8080..."
        kill -9 $PID
    fi
    
    echo "清理完成"
    exit 0
}

# 注册信号处理
trap cleanup SIGINT SIGTERM EXIT

# 检查端口是否被占用
check_port() {
    if lsof -i:8080 > /dev/null 2>&1; then
        echo "端口 8080 已被占用，尝试释放..."
        cleanup
        sleep 2
    fi
}

# 设置环境变量并启动服务
export ARK_API_KEY="b46b416a-3457-4063-aad5-b1b2338d4726"

# 如果虚拟环境不存在，创建它
if [ ! -d ".venv" ]; then
    python -m venv .venv
fi

# 激活虚拟环境
. .venv/bin/activate

# 安装依赖
pip install poetry==1.6.1
poetry install

# 检查端口
check_port

# 运行Python服务并保存PID
echo "启动服务 (端口: 8080)..."
poetry run python handler.py & echo $! > .pid

# 等待服务运行
wait $(cat .pid)